GremlinのFreeプランで利用できる攻撃種類が増えていたので試してみる ~ State編 ~
今までGremlinのFreeプランで行える攻撃は、
- State
- Shutdown
- Resource
- CPU
- Network
- Blackhole
の三種類でした。
参考動画
それがアップデートにより有料プランでしかできなかった攻撃種類が可能となったため紹介しようと思います。
できるようになった攻撃種類ですが、
- State
- Process Killer (指定されたプロセスを強制終了する攻撃)
- Time Travel (システム時刻を変更します)
- Resource
- Disk (ディスクスペースを消費します)
- IO (対象のファイルシステムデバイスのリソースを消費します)
- Memory (メモリを消費します)
- Network
- DNS (DNSサーバーへのアクセスをブロックします)
- Latency (一致するすべての出力ネットワークトラフィックに遅延を追加します)
- Packet Loss(一致するすべての出力ネットワークトラフィックにパケット損失を導入します)
以上の8つが増えて、計11種類の攻撃が実行できるようになっています。
本記事ではStateに対応する攻撃2種類を試してみようと思います。
試してみる
GremlinのagentをインストールしたAmazon Linux2の環境で試してみます。
Process Killer
攻撃の期間中、指定された間隔で対象のプロセスを強制終了します。 正規表現で識別される一連のプロセス、またはプロセスID(PID)で識別される特定のプロセスを選択できます.
※ オプションなどは公式ドキュメントにて
Gremlinダッシュボードの Attacks -> New
のページから攻撃対象のホストを選択後、Process Killer
を選択してどのプロセスを落とすか入力します。
31168
を指定してみました。これは攻撃対象インスタンスのhttpdのプロセスIDです。
実際にUnleash Gremlin
を行うと, Intervalに指定した秒数後、実行されます。
実行のログは上記の通りUI上で確認可能です。
2021-02-16 04:29:10 - Killed PID 31168 via signal 9
と出ているので、実際にプロセスが落ちたかをサーバーで確認してみます。
systemctl status httpd
で確認したところ、確かに落ちていますね。
Active: failed (Result: signal) since Tue 2021-02-16 04:29:10 UTC; 30s ago
と、時刻もGremlinのログと一致しています。
Time Travel
ターゲットのオペレーティングシステムのシステム時間を変更します。 オプションで、標準のNTPポートを介したすべてのトラフィックをブロックします(NTPによる時刻修正を無効にすることができる)
※ オプションなどは公式ドキュメントにて
Gremlinダッシュボードの Attacks -> New
のページから攻撃対象のホストを選択後、Time Travel
を選択して攻撃時間やオフセットを入力します。
60秒間攻撃を実行し、時刻を1日分プラスしてみます。
確認のため、watch -n 1 date
コマンドを使ってサーバー上の時刻を表示し続けておきます。
準備が整ったのでUnleash Gremlin
してみましょう。
実行中のGremlinのログを確認してみると、
2021-02-16 04:59:28 - Current system time is 2021-02-16 04:59:28 (UTC). 2021-02-17 04:59:28 - Modified system time to 2021-02-17 04:59:28 (UTC).
Offsetで指定した時間分追加したと出ていますね。
watch -n 1 date
の出力を見てみると、
Tue Feb 16
からTue Feb 17
へ変わっていました。
1分間の実験の後、ログには
2021-02-17 05:00:28 - Rollback system time change (2021-02-17 05:00:28 => 2021-02-16 05:00:29)
と時刻が元に戻っていることがわかります。
最後に
今回はFreeプランでも実行できるようになった Process Killer と Time Travel 攻撃を試してみました。
Freeプランで気軽に試せるようになったので、カオスエンジニアリングが気になっている人にはとても良いアップデートだと思います。
今回の実験内容では、以下のようなことが質問できますね。
- システムにとって重要なプロセスを落とすとどうなるかわかりますか?
- サーバーの時刻がずれたらシステムにどのような影響を与えますか?
- プロセスの監視はきちんと行えてますか?ちゃんと気付けますか?
- 自動的に復旧できていますか?
このようなことを関係者全員が理解し、改善したりすることが重要です。 日頃から実験をすることで自分たちが提供しているシステムにより自信をつけましょうというのもカオスエンジニアリングの目的の一つですね。
※ Resource、 Networkの攻撃種類に関しては別記事にて紹介します